#============================================================
#	Camera Zoom
#============================================================
# @datetime: 2022-3-16 16:41:15
#============================================================


## 设置相机镜头为地图的大小范围的缩放
@tool
class_name CameraZoom
extends Camera2DByTileMapBase


enum ScaleType {
	Normal,	# 按照常比例进行缩放
	Min,	# 按照最小的范围进行缩放
	Max,	# 按照最大的范围进行缩放
}

@export var scale_type : ScaleType = ScaleType.Normal
@export var min_zoom : Vector2 = Vector2(0, 0)
@export var max_zoom : Vector2 = Vector2(10, 10)


#============================================================
#   自定义
#============================================================
#(override)
func _update_camera():
	var camera : Camera2D = get_parent()
	var tilemap : TileMap = get_node_or_null(_tilemap)
	var rect : Rect2 = tilemap.get_used_rect()
	rect.size *= tilemap.cell_size
	var scale = rect.size / tilemap.get_viewport_rect().size
	match scale_type:
		ScaleType.Min:
			var z = min(scale.x, scale.y)
			camera.zoom = Vector2(z, z)
		ScaleType.Max:
			var z = max(scale.x, scale.y)
			camera.zoom = Vector2(z, z)
		ScaleType.Normal:
			camera.zoom = scale
	
	# 不能低于最小也不能超出最大
	camera.zoom.x = clamp(camera.zoom.x, min_zoom.x, max_zoom.x)
	camera.zoom.y = clamp(camera.zoom.y, min_zoom.y, max_zoom.y)
	
#	Log.info(self, [camera.zoom])

